int DiscAtan16 (dy,dx)
int dy,dx;
{
   int   phi;
   long  quo, Adx, Ady;

   Adx = (long) abs (dx);
   Ady = (long) abs (dy);

   if (Adx==0 || Ady==0)
      return  ((Adx==0 && Ady==0)  ?  0 :
              ((Adx==0) ?
              ((dy < 0) ?  12 : 4) :
              ((dx < 0) ?   8 : 0)));
   else{
      quo = (100*Ady) / Adx;

      phi = ((quo <   20)  ?  0 :
            ((quo <   67)  ?  1 :
            ((quo <  150)  ?  2 :
            ((quo <  503)  ?  3 : 4 ))));

      return ((dy > 0)  ?
             ((dx > 0)  ?  phi   : 8-phi) :     /* 1.quad : 2.quad */
             ((dx < 0)  ?  8+phi :              /* 3.quad */
             ((phi==0)  ?  0     : 16-phi)));   /* 4.quad */
}  }
